/**
 * <p>Title: MaterialCodeRest</p>
 * <p>Description: The Interface of MaterialCode Svc </p>
 * <p>Copyright: Shanghai Batchsight Pharmaceutical Technologies, Inc. Copyright(c) 2016</p>
 * @author Chen Wei
 * @version 1.0
 * <pre>Histroy:
 *       2016-12-14  Chen Wei  Create
 *</pre>
*/
package cn.jhg.account.rest;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import cn.jhg.account.entity.MaterialCode;
import cn.jhg.account.util.ServiceResult;

@Path("/MaterialCodes")
public interface MaterialCodeRest {
	
	/**
	 * 新增原料编码
	 * @param code	编码
	 * @param name	编码名
	 * @param spec	编码说明
	 * @param typeId	类型ID
	 * @param propId	属性Object ID
	 * @param valid		true or false
	 * @return	原料编码id 和 errorCode
	 */
	@Path("/add")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<Integer> addCode(@FormParam("code") String code,
			@FormParam("name") String name,
			@FormParam("spec") String spec,
			@FormParam("typeId") int typeId,
			@FormParam("propId") String propId,
			@FormParam("valid") boolean valid);
	
	/**
	 * 删除原料编码
	 * @param id	原料编码ID
	 * @return		ErrorCode
	 */
	@Path("/delete")
	@DELETE
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<Integer> deleteCode(@FormParam("id")  int id);
	
	/**
	 * 修改原料编码
	 * @param id	原料编码ID
	 * @param code	编码
	 * @param name	编码名
	 * @param spec	编码说明
	 * @param typeId	类型ID
	 * @param propId	属性Object ID
	 * @param valid		true or false
	 * @return 			ErrorCode
	 */
	@Path("/update")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<Integer> updateCode(@FormParam("id") int id,
			@FormParam("code") String code,
			@FormParam("name") String name,
			@FormParam("spec") String spec,
			@FormParam("typeId") int typeId,
			@FormParam("propId") String propId,
			@FormParam("valid") boolean valid);
	
	/**
	 * 根据编码查找原料
	 * @param code 原料编码
	 * @return	MaterialCode实体 和 ErrorCode
	 */
	@Path("/queryByCode")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<MaterialCode> queryByCode(
			@QueryParam("code") String code );
	
	/**
	 * 根据编码id查找原料
	 * @param id 原料编码id
	 * @return	MaterialCode实体 和 ErrorCode
	 */
	@Path("/queryById")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<MaterialCode> queryById(
			@QueryParam("id") String id );
	
	/**
	 * 查找原料
	 * @param id 原料编码id
	 * @return	MaterialCode实体 和 ErrorCode
	 */
	@Path("/findCodeDetail")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<List<MaterialCode>> findCodeDetail(
			@QueryParam("code") String code,
			@QueryParam("name") String name,
			@QueryParam("spec") String spec,
			@QueryParam("typeId") int typeId);
	
	/**
	 * 失效原料编码
	 * @param id	原料编码ID
	 * @return 			ErrorCode
	 */
	@Path("/invalidCode")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<Integer> invalidCode(@FormParam("id") int id);
	
	/**
	 * @author Wan Shuaishuai
	 * 查询产品
	 * @param str  包含code、name的字符串
	 * @return 	ServiceResult<List<MaterialCode>>	MaterialCode集合,ErrorCode
	 */
	@Path("/findProduct")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<List<MaterialCode>> findMaterialCodeDetail(
			@QueryParam("str") String str);
	
	/**
	 * @author Wan Shuaishuai
	 * 查询产品
	 * @param str  包含code、name的字符串
	 * @return 	ServiceResult<List<MaterialCode>>	MaterialCode集合,ErrorCode
	 */
	@Path("/findMaterialCodeDetail")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public ServiceResult<List<MaterialCode>> findMaterialCodeDetails(
			@QueryParam("str") String str);
}
